/*************************************************************************
	> File Name: oj-402_elevator.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月20日 星期五 19时43分31秒
 ************************************************************************/

#include <iostream>
#include <queue>
using namespace std;

struct node {
    int now, step;
};

//num表示第i层的时候可以上下多少
//check用来去重，表示来过这一层
int n, a, b, num[205], check[205];

int main() {
    cin >> n >> a >> b;
    for (int i = 1; i <= n; ++i) {
        cin >> num[i];
    }
    queue<node> que;
    //**起始状态
    que.push((node){a, 0});
    check[a] = 1;
    //开始搜索
    while (!que.empty()) {
        node temp = que.front();
        que.pop();
        //**状态转移
        //分别求出往上走和往下走的层数
        int up = temp.now + num[temp.now];
        int down = temp.now - num[temp.now];
        //如果正好走到b层
        //**终止条件1
        if (up == b || down == b) {
            cout << temp.step + 1 << endl;
            return 0;
        }
        //如果没走到终点
        //判断出界
        if (up <= n && check[up] == 0) {
            que.push((node){up, temp.step + 1});
            check[up] = 1;
        }
        if (down >= 1 && check[down] == 0) {
            que.push((node){down, temp.step + 1});
            check[down] = 1;
        }
    }
    //**终止条件2
    //如果搜完全部走法还走不到b层，输出-1
    cout << -1 << endl;
    return 0;
}
